package com.linchong.concurrency.syncContainer;

import com.linchong.concurrency.annoations.UnThreadSafe;

import java.util.Iterator;
import java.util.Vector;

/**
 * @author linchong
 * @version 1.0
 * @Date: 2020-12-08 21:19
 * @Description: VectorExample2$同步容器的调用顺序
 */
@UnThreadSafe
public class VectorExample3 {

	//java.util.ConcurrentModificationException
	private static void test1(Vector<Integer> v1){
		for (Integer integer : v1) {
			if(integer.equals(3)){
				v1.remove(integer);
			}
		}
	}

	//java.util.ConcurrentModificationException
	private static void test2(Vector<Integer> v1){
		Iterator<Integer> iterator = v1.iterator();
		while (iterator.hasNext()){
			Integer i = iterator.next();
			if(i.equals(3)){
				v1.remove(i);
			}
		}
	}

	//success
	private static void test3(Vector<Integer> v1){
		for (int i = 0; i < v1.size(); i++) {
			if(v1.get(i).equals(3)){
				v1.remove(i);
			}
		}
	}

	public static void main(String[] args) {
		Vector<Integer> vector = new Vector<>();
		vector.add(1);
		vector.add(2);
		vector.add(3);
		//test1(vector);
		test2(vector);
		//test3(vector);
	}
}
